package com.shanjupay.common.config.redis;

import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * @author dudu
 */
public interface RedisService {
    /**
     * hash操作 hset
     * @param key key
     * @param hashKey hashKey
     * @param value value
     */
    void hmSet(String key, String hashKey, String value);

    /**
     * hash操作 hset
     * @param key key
     * @param map hashKey
     */
    void hmSet(String key, Map<String, String> map);

    /**
     * hash操作 hset
     * @param key
     * @param hashKey
     * @return
     */
    String hmGet(String key, String hashKey);

    /**
     * get
     * @param key key
     * @return string
     */
    String get(final String key);

    /**
     * set
     * @param key key
     * @param value value
     * @return boolean
     */
    boolean set(final String key, String value);

    /**
     * set
     * @param key key
     * @param value value
     * @param expireTime expireTime
     * @return boolean
     */
    boolean set(final String key, String value, Long expireTime);

    /**
     * remove
     * @param key key
     */
    void remove(final String key);

    /**
     * exists
     * @param key key
     * @return boolean
     */
    boolean exists(final String key);

    /**
     * expire
     * @param key key
     * @param expireTime expireTime
     * @return boolean
     */
    boolean expire(final String key, Long expireTime);

    /**
     * keys
     * @param key key
     * @return Set
     */
    Set<String> keys(String key);

    /**
     * incr
     * @param key key
     * @return String
     */
    String incr(String key);

    /**
     * incrBy
     * @param key key
     * @param range range
     * @return String
     */
    String incrBy(String key, int range);

    /**
     * decr
     * @param key key
     * @return String
     */
    String decr(String key);

    /**
     * sadd
     * @param key key
     * @param value value
     * @return long
     */
    long sadd(String key, String... value);

    /**
     * expire
     * @param key
     * @param expireTime
     * @param timeUnit
     */
    void expire(String key, long expireTime, TimeUnit timeUnit);
}
